From fb94b59330ab9506fb1e9dcd9425737c6d728577 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 24 Nov 2005 19:40:18 +0100 Subject: [PATCH] Another PAE fix for pgd_ctor. Signed-off-by: Keir Fraser --- linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c b/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c index a894a54ede..e9d2d745fb 100644 --- a/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c +++ b/linux-2.6-xen-sparse/arch/xen/i386/mm/pgtable.c @@ -285,19 +285,18 @@ void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused) BUG_ON(rc); #endif - if (!HAVE_SHARED_KERNEL_PMD) - spin_lock_irqsave(&pgd_lock, flags); - - memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD, - swapper_pg_dir + USER_PTRS_PER_PGD, - (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); - - if (HAVE_SHARED_KERNEL_PMD) + if (HAVE_SHARED_KERNEL_PMD) { + memcpy((pgd_t *)pgd + USER_PTRS_PER_PGD, + swapper_pg_dir + USER_PTRS_PER_PGD, + (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); return; + } + + memset(pgd, 0, PTRS_PER_PGD*sizeof(pgd_t)); + spin_lock_irqsave(&pgd_lock, flags); pgd_list_add(pgd); spin_unlock_irqrestore(&pgd_lock, flags); - memset(pgd, 0, USER_PTRS_PER_PGD*sizeof(pgd_t)); } void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused) -- 2.30.2